﻿using System;
using System.Collections.Generic;
using Enterprise.Infrastructure.Entity;
using System.Data.SqlClient;
using System.Data;

namespace Enterprise.Infrastructure.Repository
{
    public class UsuarioProvider : Provider<EntidadeUsuario>
    {
        /// <summary>
        /// Cria um novo Usuario.
        /// </summary>
        /// <param name="objeto"></param>
        /// <returns></returns>
        public override long Criar(EntidadeUsuario objeto)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("UsuarioCriar", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@Usuario", SqlDbType.NVarChar).Value = objeto.Usuario;
                cmd.Parameters.Add("@Senha", SqlDbType.NVarChar).Value = objeto.Senha;
                cmd.Parameters.Add("@Bloqueado", SqlDbType.Bit).Value = objeto.Bloqueado;
                cmd.Parameters.Add("@DataCadastro", SqlDbType.DateTime).Value = objeto.DataCadastro;
                cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = objeto.Email;
                cmd.Parameters.Add("@UsuarioID", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@UsuarioID"].Value;
            }
        }

        /// <summary>
        /// Metodo não implementado.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public override bool Apagar(long id)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Atualiza os dados do Usuario. 
        /// </summary>
        /// <param name="objeto"></param>
        /// <returns></returns>
        public override bool Atualizar(EntidadeUsuario objeto)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("UsuarioAtualizar", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@Usuario", SqlDbType.NVarChar).Value = objeto.Usuario;
                cmd.Parameters.Add("@Senha", SqlDbType.NVarChar).Value = objeto.Senha;
                cmd.Parameters.Add("@Bloqueado", SqlDbType.Bit).Value = objeto.Bloqueado;
                cmd.Parameters.Add("@DataCadastro", SqlDbType.DateTime).Value = objeto.DataCadastro;
                cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = objeto.Email;
                cmd.Parameters.Add("@UsuarioID", SqlDbType.Int).Value = objeto.UsuarioID;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }  
        }

        public override EntidadeUsuario ObterPorId(long id)
        {
            throw new NotImplementedException();
        }

        public override int ObterNumeroDeRegistros()
        {
            throw new NotImplementedException();
        }

        public override List<EntidadeUsuario> ObterRegistros(int indice, int tamanhoPagina)
        {
            throw new NotImplementedException();
        }

        public override EntidadeUsuario PreencherObjeto(IDataReader reader)
        {
            throw new NotImplementedException();
        }
    }
}
